package fr.gadcparis.envieparisienne;

import com.google.android.maps.MapView;

import android.content.Context;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import fr.gadcparis.envieparisienne.model.FtUsersInformations;
import fr.gadcparis.envieparisienne.model.Hit;
import fr.gadcparis.envieparisienne.model.HitFt;
import greendroid.app.GDActivity;
import greendroid.widget.ActionBar;

public class DetailsItemActivity extends GDActivity {
	
	private Hit hit;
	private Context context;
	private boolean alreadyInsert = false;
	private boolean working = true;
	private boolean exists = true;
	private int workingValue = 0;
	private int existsValue = 0;
	
	private class GetInfos extends AsyncTask<Integer, Void, Hit>{
		@Override
		protected Hit doInBackground(Integer... params) {
			FtUsersInformations userInformation = new FtUsersInformations(context);
			userInformation.select(hit.getDatasetId(), hit.getId());
			Log.i("TOTO", "count: " + userInformation.count());
			if (userInformation.count() > 0) {
				return userInformation.getHit(0);
			}
			else {
				return null;
			}
		}
		
		protected void onPostExecute(Hit hit) {
			displayInformation(hit);
	     }
	}
	
	private class InsertInfos extends AsyncTask<Integer, Void, Void>{
		@Override
		protected Void doInBackground(Integer... params) {
			FtUsersInformations userInformation = new FtUsersInformations(context);
			userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), 0, hit.getDatasetId(), 0);
			return null;
		}
	}
	
	private class UpdateExists extends AsyncTask<Integer, Void, Void>{
		@Override
		protected Void doInBackground(Integer... params) {
			FtUsersInformations userInformation = new FtUsersInformations(context);
			/*if (alreadyInsert) {
				userInformation.updateExists(hit.getDatasetId(), hit.getId(), existsValue+1);
			}
			else {
				userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), 1, hit.getDatasetId(), 0);
			}*/
			userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), existsValue+1, hit.getDatasetId(), workingValue);
			return null;
		}
	}
	
	private class UpdateAlert extends AsyncTask<Integer, Void, Void>{
		@Override
		protected Void doInBackground(Integer... params) {
			FtUsersInformations userInformation = new FtUsersInformations(context);
			/*if (alreadyInsert) {
				userInformation.updateAlert(hit.getDatasetId(), hit.getId(), true);
			}
			else {
				userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), 0, hit.getDatasetId(), 0);
			}*/
			userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), 0, hit.getDatasetId(), 0);
			return null;
		}
	}
	
	private class UpdateProblem extends AsyncTask<Integer, Void, Void>{
		@Override
		protected Void doInBackground(Integer... params) {
			FtUsersInformations userInformation = new FtUsersInformations(context);
			/*if (alreadyInsert) {
				userInformation.updateProblem(hit.getDatasetId(), hit.getId(), workingValue+1);
			}
			else {
				userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), 0, hit.getDatasetId(), 1);
			}*/
			userInformation.insert(hit.getDatasetId(), hit.getLocation(), "", hit.getId(), existsValue, hit.getDatasetId(), workingValue+1);
			return null;
		}
	}

	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		this.context = this;
		ActionBar aBar = getActionBar();
        
        Object o = getIntent().getExtras().get("hit");
		if (o != null && o instanceof Hit) {
			this.hit = (Hit) o;
			aBar.setTitle(hit.getName());
			GetInfos infos = new GetInfos();
			infos.execute(null);
		}
		else {
			aBar.setTitle(this.getString(R.string.app_name));
		}
        setActionBarContentView(R.layout.item);
    }
	
	private void displayInformation(Hit hit) {
		TextView tv = (TextView) this.findViewById(R.id.item_state);
		StringBuilder text = new StringBuilder();
		
		if (hit != null) {
			alreadyInsert = true;
			int existant = Integer.parseInt(hit.getMeta("existant", "-1"));
			if (existant > 0) {
				existsValue = existant;
				text.append(existant);
				if (existant == 1) {
					text.append(" personne a indiqué que cet objet n'existait pas.");
				}
				else {
					text.append(" personnes ont indiqué que cet objet n'existait pas.");
				}
				text.append("\n");
			}

			int disfonctionne = Integer.parseInt(hit.getMeta("disfonctionne", "-1"));
			if (disfonctionne > 0) {
				workingValue = existant;
				text.append(disfonctionne);
				if (existant == 1) {
					text.append(" personne a indiqué que cet objet présentait un disfonctionnement.");
				}
				else {
					text.append(" personnes ont indiqué que cet objet présentait un disfonctionnement.");
				}
				text.append("\n");
			}
			tv.setText(text.toString());
		}
	}
	
	@Override
	protected void onResume() {
		super.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
	}

	@Override
	protected void onStop() {
		super.onStop();
	}
	
	public void onBtnClick(View v){
    	
    	switch(v.getId()){
    	case R.id.item_btn_existstate:
    		if (exists) {
    			exists = false;
    			new UpdateExists().execute(null);
    		}
    		break;
    	case R.id.item_btn_workingstate:
    		if (working) {
    			working = false;
   		 		new UpdateProblem().execute(null);
    		}
    		break;
    	}
    }
	
}
